package org.core.tliaswebmanagement.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Slf4j
@Order(5) //其中的值为相对值,不写则在Order则在有Order的类后执行
@Component
//@Aspect
public class MyAspect3 {
    /*
    *切入点表达式：可使用逻辑运输符,一般基于接口匹配,尽量缩小范围
    * execution(权限修饰符? 返回值 包名.类名.?方法名(方法参数) throws 异常?) ?前面的紧邻的部分可省略
    * '*'单独的任意符号,可通配任意返回值,包名类名方法名以及任意类型的一个参数,也可通配其中的一部分,eg:del* 表示查找对象一定是del开头
    * '..'多个连续的任意符号,可通配任意层级的包,或任意类型任意个数的参数
    * @annotation()
     */
    @Pointcut("execution(* org.core.tliaswebmanagement.service.impl.*.list(..))||"+
    "execution(* org.core.tliaswebmanagement.service.impl.*.delete(..))")//左边图标可点则切入点表达式无误,若包名类名省略则全项目查找
    public void pt(){}
    //前置通知
    @Before("pt()")
    public void before(){
        log.info("MyAspect3 -> before ...");
    }

    //后置通知
    @After("pt()")
    public void after(){
        log.info("MyAspect3 ->  after ...");
    }
}